
/**
 * Project Name:sell.<br/> 
 * File Name:StringUtils.java.<br/> 
 * Package Name:com.imooc.sell.utils.<br/> 
 * Date:2017年12月12日下午12:28:17.<br/> 
 * Copyright (c) 2017, 版权所有 (C) 2016-2036  土豆互联科技(深圳)有限公司 www.potato369.com All Rights Reserved.<br/> 
 */

package com.imooc.sell.utils;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * ClassName: StringUtils. <br/>
 * Function: ADD FUNCTION.<br/>
 * Reason: ADD REASON(可选).<br/>
 * Date: 2017年12月12日 下午12:28:17. <br/>
 * Desc: ADD DESC(可选). <br/>
 * 
 * @author 王艳军
 * @version
 * @since JDK 1.6
 */

public class StringUtil {

  /**
   * 将以逗号分隔的字符串转换成字符串数组
   * 
   * @param valStr
   * @return String[]
   */
  public static String[] StrList(String valStr) {
    int i = 0;
    String TempStr = valStr;
    String[] returnStr = new String[valStr.length() + 1 - TempStr.replace(",", "").length()];
    valStr = valStr + ",";
    while (valStr.indexOf(',') > 0) {
      returnStr[i] = valStr.substring(0, valStr.indexOf(','));
      valStr = valStr.substring(valStr.indexOf(',') + 1, valStr.length());

      i++;
    }
    return returnStr;
  }

  /**
   * 随机生成六位数验证码
   * 
   * @return
   */
  public static int getRandomNum() {
    Random r = new Random();
    return r.nextInt(900000) + 100000;// (Math.random()*(999999-100000)+100000)
  }

  /**
   * 检测字符串是否不为空(null,"","null")
   * 
   * @param s
   * @return 不为空则返回true，否则返回false
   */
  public static boolean notEmpty(String s) {
    return s != null && !"".equals(s) && !"null".equals(s);
  }

  /**
   * 检测数字是否不为(null,0)
   * 
   * @param s
   * @return 不为空则返回true，否则返回false
   */
  public static boolean notZero(Integer s) {
    return s != null && 0 != s;
  }

  /**
   * 检测字符串是否为空(null,"","null")
   * 
   * @param s
   * @return 为空则返回true，不否则返回false
   */
  public static boolean isEmpty(String s) {
    return s == null || "".equals(s) || "null".equals(s);
  }

  /**
   * 检测字符串是否为(null,0)
   * 
   * @param s
   * @return 为空则返回true，不否则返回false
   */
  public static boolean isZero(Integer s) {
    return s == null || 0 == s;
  }

  /**
   * 字符串转换为字符串数组
   * 
   * @param str
   *          字符串
   * @param splitRegex
   *          分隔符
   * @return
   */
  public static String[] str2StrArray(String str, String splitRegex) {
    if (isEmpty(str)) {
      return null;
    }
    return str.split(splitRegex);
  }

  /**
   * 用默认的分隔符(,)将字符串转换为字符串数组
   * 
   * @param str
   *          字符串
   * @return
   */
  public static String[] str2StrArray(String str) {
    return str2StrArray(str, ",\\s*");
  }

  /**
   * 按照yyyy-MM-dd HH:mm:ss的格式，日期转字符串
   * 
   * @param date
   * @return yyyy-MM-dd HH:mm:ss
   */
  public static String date2Str(Date date) {
    return date2Str(date, "yyyy-MM-dd HH:mm:ss");
  }

  /**
   * 按照yyyy-MM-dd HH:mm:ss的格式，字符串转日期
   * 
   * @param date
   * @return
   */
  public static Date str2Date(String date) {
    if (notEmpty(date)) {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      try {
        return sdf.parse(date);
      } catch (ParseException e) {
        e.printStackTrace();
      }
      return new Date();
    } else {
      return null;
    }
  }

  /**
   * 按照参数format的格式，日期转字符串
   * 
   * @param date
   * @param format
   * @return
   */
  public static String date2Str(Date date, String format) {
    if (date != null) {
      SimpleDateFormat sdf = new SimpleDateFormat(format);
      return sdf.format(date);
    } else {
      return "";
    }
  }

  /**
   * 把时间根据时、分、秒转换为时间段
   * 
   * @param StrDate
   */
  public static String getTimes(String StrDate) {
    String resultTimes = "";

    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    java.util.Date now;

    try {
      now = new Date();
      java.util.Date date = df.parse(StrDate);
      long times = now.getTime() - date.getTime();
      long day = times / (24 * 60 * 60 * 1000);
      long hour = (times / (60 * 60 * 1000) - day * 24);
      long min = ((times / (60 * 1000)) - day * 24 * 60 - hour * 60);
      long sec = (times / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);

      StringBuffer sb = new StringBuffer();
      // sb.append("发表于：");
      if (hour > 0) {
        sb.append(hour + "小时前");
      } else if (min > 0) {
        sb.append(min + "分钟前");
      } else {
        sb.append(sec + "秒前");
      }

      resultTimes = sb.toString();
    } catch (ParseException e) {
      e.printStackTrace();
    }

    return resultTimes;
  }

  /**
   * 写txt里的单行内容
   * 
   * @param fileP 文件路径
   * @param content 写入的内容
   */
  public static void writeFile(String fileP, String content) {
    String filePath = String.valueOf(Thread.currentThread().getContextClassLoader().getResource("")) + "../../"; // 项目路径
    filePath = (filePath.trim() + fileP.trim()).substring(6).trim();
    if (filePath.indexOf(":") != 1) {
      filePath = File.separator + filePath;
    }
    try {
      OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(filePath), "utf-8");
      BufferedWriter writer = new BufferedWriter(write);
      writer.write(content);
      writer.close();

    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  /**
   * 验证邮箱
   * 
   * @param email
   * @return
   */
  public static boolean checkEmail(String email) {
    boolean flag = false;
    try {
      String check = "^([a-z0-9A-Z]+[-|_|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
      Pattern regex = Pattern.compile(check);
      Matcher matcher = regex.matcher(email);
      flag = matcher.matches();
    } catch (Exception e) {
      flag = false;
    }
    return flag;
  }

  /**
   * 验证手机号码
   * 
   * @param mobileNumber
   * @return
   */
  public static boolean checkMobileNumber(String mobileNumber) {
    boolean flag = false;
    try {
      Pattern regex = Pattern
          .compile("^(((13[0-9])|(15([0-3]|[5-9]))|(18[0,5-9]))\\d{8})|(0\\d{2}-\\d{8})|(0\\d{3}-\\d{7})$");
      Matcher matcher = regex.matcher(mobileNumber);
      flag = matcher.matches();
    } catch (Exception e) {
      flag = false;
    }
    return flag;
  }

  /**
   * 检测KEY是否正确
   * 
   * @param paraname
   *          传入参数
   * @param FKEY
   *          接收的 KEY
   * @return 为空则返回true，不否则返回false
   */
  public static boolean checkKey(String paraname, String FKEY) {
    paraname = (null == paraname) ? "" : paraname;
    return MD5Util.md5(paraname + DateUtil.getDays() + ",fh,").equals(FKEY);
  }

  /**
   * 读取txt里的单行内容
   * 
   * @param fileP
   *          文件路径
   */
  @SuppressWarnings("resource")
  public static String readTxtFile(String fileP) {
    String lineTxt = "";
    try {
      String filePath = String.valueOf(Thread.currentThread().getContextClassLoader().getResource("")) + "../../"; // 项目路径
      filePath = filePath.replaceAll("file:/", "");
      filePath = filePath.replaceAll("%20", " ");
      filePath = filePath.trim() + fileP.trim();
      if (filePath.indexOf(":") != 1) {
        filePath = File.separator + filePath;
      }
      String encoding = "utf-8";
      File file = new File(filePath);

      if (file.isFile() && file.exists()) { // 判断文件是否存在
        InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding); // 考虑到编码格式
        BufferedReader bufferedReader = new BufferedReader(read);
        while ((lineTxt = bufferedReader.readLine()) != null) {
          return lineTxt;
        }
        read.close();
        bufferedReader.close();
      } else {
        System.out.println("找不到指定的文件,查看此路径是否正确:" + filePath);
      }
    } catch (Exception e) {
      System.out.println("读取文件内容出错");
    }
    return lineTxt;
  }

  /**
   * 
   * devide:(将小数点后面全是零则去掉小数点). <br/>
   * 
   * @author wangyanjun
   * @param  s
   * @return String String
   * @since JDK 1.6
   */
  public static String devide(String s) {
    if (s.indexOf(".") > 0) {
      // 正则表达
      s = s.replaceAll("0+?$", "");// 去掉后面无用的零
      s = s.replaceAll("[.]$", "");// 将小数点后面全是零则去掉小数点
    }
    return s;
  }

  /**
   * 生成时间戳
   * 
   * @return String
   */
  public static String create_timestamp() {
    return Long.toString(System.currentTimeMillis() / 1000);
  }

  public static void main(String[] args) {
    System.out.println(getRandomNum());
    System.out.println(devide("0.01"));
    System.out.println(create_timestamp());
  }

}
